package com.test.designpattern.decoration;

/**
 * Created by jl on 2018/8/29 0029
 * 装饰者模式，动态地将责任附加到对象上。若要扩展功能，装饰者提供了比继承更加有弹性的替代方案。
 * 装饰者的使用场景
 * 　　1、在不影响其他对象的情况下，以动态、透明的方式给单个对象添加职责。
 *
 * 　　2、需要动态地给一个对象增加功能，这些功能也可以动态地被撤销。  当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时。
 */
public class Client {
    public static void main(String[] args) {
        // 测试单纯的食物
        Food f1 = new Chicken();
        System.out.println(f1.getDesc());

        System.out.println("----------------------");
        // 测试单修饰的食物
        RoastFood rf = new RoastFood(f1);
        System.out.println(rf.getDesc());

        System.out.println("----------------------");
        // 测试多重修饰的食物
        SteamedFood sf = new SteamedFood(rf);
        System.out.println(sf.getDesc());

        SteamedFood ssf = new SteamedFood(sf);
        System.out.println(ssf.getDesc());
    }
}
